
import re
from langchain import chains
from langchain.prompts import PromptTemplate
from langchain_community.chat_models import ChatTongyi
from langchain.output_parsers import PydanticOutputParser
from langchain.chains import LLMChain, SequentialChain
from langchain.chains.base import Chain
from pydantic import BaseModel, Field
from typing import List, Optional, Dict, Any
from dotenv import load_dotenv
import os
from checker.base_checker import BaseChecker
from domain.check_domain import ComplianceCheckResult
from langchain_core.runnables import RunnablePassthrough
from langchain.prompts import StringPromptTemplate

load_dotenv()

"""二级医疗器械checker"""
class SecondMedicalChecker(BaseChecker):

    def getTemplate(self) -> StringPromptTemplate:
        
        return  """你是一位二级医疗器械合规性检查专家，需对输入的商品名称进行系统性合规审查。请按照以下框架输出分析结果：

        商品名称：{product_name}
 
        请按照以下步骤进行分析：

        1. 基础信息核验
        - 注册证编号验证：是否标注「械注准」字样（如：沪械注准2023214XXXX）
        - 适用范围核查：是否与注册证载明的「预期用途」完全一致
        - 结构组成清单：是否与备案的「产品技术要求」中组件列表匹配
        
        2. 宣称内容审查
        - 医疗效果暗示
        ▸ 禁止使用「治疗」「修复」「治愈」等术语（例：将「缓解疼痛」改为「辅助缓解」）
        ▸ 不得引用临床数据（如「临床验证有效率98%」）
        - 功能边界界定
        ▸ 区分「辅助治疗」与「替代治疗」表述（参考《医疗器械通用名称命名规则》）
        ▸ 禁止与药品功效关联（如「类比布洛芬退热效果」）
        
        3. 标签标识合规
        - 特殊标识检查
        ▸ 二类器械必须标注「Ⅱ类」及监管类别代码（如：09-02-01）
        ▸ 进口产品需同时标注中文原厂信息与境内代理人信息
        - 警示语规范
        ▸ 必须包含「请仔细阅读产品说明书」及禁忌症提示
        ▸ 植入类器械需增加「在医疗机构使用」声明
        
        4. 风险等级判定
        - 高风险点：未经注册的组件（如添加未申报的电极片）
        - 中风险点：适用人群扩大化（如将「成人用」改为「全年龄段」）
        - 低风险点：包装颜色不符合《医疗器械说明书和标签管理规定》
        
        
        【特别提示】
        需重点核查：
        - 是否存在「家用版医用设备」等混淆表述
        - 是否有「永久有效」「零风险」等绝对化承诺
        - 组件是否取得单独注册（如理疗仪配套的电极需单独备案）

        {format_instructions}
      """


